package com.yunsc.product.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yunsc.common.utils.PageResult;
import com.yunsc.media.entity.YunscUploadFileEntity;
import com.yunsc.product.dto.GoodsBaseDTO;
import com.yunsc.product.dto.GoodsParamsDTO;
import com.yunsc.product.dto.QueryGoodsDTO;
import com.yunsc.product.entity.YunscGoodsEntity;
import com.yunsc.product.entity.YunscSpecValueEntity;
import com.yunsc.product.vo.GoodsDetailVO;
import com.yunsc.product.vo.GoodsInfoVO;

import java.util.List;

/**
 * 商品记录表
 *
 * @author adan
 * @email 2028038953@qq.com
 * @date 2024-04-04 21:28:41
 */
public interface YunscGoodsService extends IService<YunscGoodsEntity> {

    /**
     * 查询商品列表
     * @param params 查询条件
     * @param currentStoreId 当前门店ID
     * @return
     * @author adan
     * @date 2024-04-04 21:30:04
     */
    PageResult<GoodsInfoVO> queryGoodsList(QueryGoodsDTO params, Integer currentStoreId);

    // 查询分类下的商品列表
    PageResult<GoodsInfoVO> queryShopGoodsList(QueryGoodsDTO params, Integer currentStoreId);

    /**
     * 查询商品详情
     * @param goodsId 商品ID
     * @return
     * @author adan
     * @date 2024-04-04 21:30:23
     */
    GoodsDetailVO queryGoodsDetailById(Integer goodsId);

    /**
     * 查询商品默认图片URL
     * @param goodsId 商品ID
     * @return 商品图片URL
     */
    String queryGoodsDefaultImageUrl(Integer goodsId);

    YunscUploadFileEntity queryGoodsDefaultImage(Integer goodsId);

    /**
     * 保存商品信息
     * @param form 商品信息
     * @param storeId 当前门店ID
     */
    void saveGoodsInfo(GoodsBaseDTO form, Integer storeId);

    /**
     * 添加数据到表goods
     *
     * @param goodsBase 商品信息
     * @param goodsId   商品ID
     * @return 商品ID
     */
    Integer saveGoodsToDb(GoodsBaseDTO goodsBase, String goodsId);

    /**
     * 保存商品SKU信息
     *
     * @param goodsBase     商品信息
     * @param specValueList
     */
    void saveGoodsSkuToDb(GoodsBaseDTO goodsBase, List<YunscSpecValueEntity> specValueList);

    /**
     * 保存商品规格信息
     *
     * @param goodsBase 商品信息
     * @param goodsId   商品ID
     * @return
     */
    List<YunscSpecValueEntity> saveGoodsSpecToDb(GoodsBaseDTO goodsBase, Integer goodsId);

    /**
     * 保存商品分类信息
     *
     * @param categoryIds 分类ID列表
     * @param goodsId     商品ID
     * @param storeId
     */
    void saveGoodsCategoryToDb(List<Integer> categoryIds, Integer goodsId, Integer storeId);

    /**
     * 保存商品图片信息
     *
     * @param imageIds 图片ID列表
     * @param goodsId  商品ID
     * @param storeId
     */
    void saveGoodsImageToDb(List<Integer> imageIds, Integer goodsId, Integer storeId);

    /**
     * 保存商品服务信息
     *
     * @param serviceIds 服务ID列表
     * @param goodsId    商品ID
     * @param storeId
     */
    void saveGoodsServiceToDb(List<Integer> serviceIds, Integer goodsId, Integer storeId);

    /**
     * 编辑商品信息
     *
     * @param goodsParams 商品信息
     * @param storeId 当前门店ID
     */
    void editGoodsInfo(GoodsParamsDTO goodsParams, Integer storeId);

    /**
     * 编辑商品规格信息
     *
     * @param goodsBase 商品信息
     * @param goodsId   商品ID
     * @return
     */
    List<YunscSpecValueEntity> editGoodsToSpec(GoodsBaseDTO goodsBase, String goodsId);

    /**
     * 编辑商品SKU信息
     *
     * @param goodsBase     商品信息
     * @param specValueList 商品ID
     * @param goodsId
     */
    void editGoodsToSku(GoodsBaseDTO goodsBase, List<YunscSpecValueEntity> specValueList, String goodsId);

    /**
     * 编辑商品分类信息
     *
     * @param categoryIds 分类ID列表
     * @param goodsId     商品ID
     * @param storeId
     */
    void editGoodsToCategory(List<Integer> categoryIds, String goodsId, Integer storeId);

    /**
     *  编辑商品图片信息
     * @param imageIds 图片ID列表
     * @param goodsId 商品ID
     * @param storeId 门店ID
     */
    void editGoodsToImage(List<Integer> imageIds, String goodsId, Integer storeId);

    /**
     * 编辑商品服务信息
     *
     * @param serviceIds 服务ID列表
     * @param goodsId    商品ID
     * @param storeId
     */
    void editGoodsToService(List<Integer> serviceIds, String goodsId, Integer storeId);

    /**
     * 删除商品信息
     *
     * @param goodsIds 商品ID
     */
    void deleteGoodsByIds(List<Integer> goodsIds);

    /**
     * 编辑商品状态
     *
     * @param goodsIds 商品ID列表
     * @param state    状态
     */
    void editGoodsState(List<Integer> goodsIds, boolean state);

    /**
     * 根据分类ID查询商品列表
     * @param categoryId 分类ID
     * @return 商品列表
     */
    List<GoodsDetailVO> queryGoodsByCategoryId(Integer categoryId, Integer showNum, String goodsSort);

    /**
     * 根据商品ID列表查询商品列表
     * @param goodsIds 商品ID列表
     * @return 商品列表
     */
    List<GoodsDetailVO> queryGoodsByIds(List<Integer> goodsIds);

    /**
     * 查询商品规格数据
     * @param goodsId 商品ID
     * @return 商品规格数据
     */
    GoodsDetailVO queryGoodsSpecData(Integer goodsId);

    /**
     * 查询商品信息
     * @param goodsId 商品ID
     * @param goodsSkuId 商品SKU ID
     * @return 商品信息
     */
    GoodsInfoVO queryGoodsInfo(Integer goodsId, String goodsSkuId);

    /**
     * 扣减商品库存
     * @param goodsId 商品ID
     * @param goodsSkuId 商品SKU ID
     * @param totalNum 数量
     */
    void deductStock(Integer goodsId, String goodsSkuId, Integer totalNum);

    /**
     * 更新商品库存
     * @param goodsId 商品ID
     * @param goodsSkuId 商品SKU ID
     * @param totalNum 数量
     */
    void addGoodsStock(Integer goodsId, String goodsSkuId, Integer totalNum);

    /**
     * 查询商品总数
     *
     * @param startInSeconds
     * @param endInSeconds
     * @param storeId        当前门店ID
     * @return 商品总数
     */
    int queryGoodsTotalCount(int startInSeconds, int endInSeconds, Integer storeId);

    /**
     * 查询已售商品总数
     * @param storeId 当前门店ID
     * @return 已售商品总数
     */
    int querySoldOutGoodsTotal(Integer storeId);

    /**
     * 查询商品列表
     * @param goodsIds 商品ID列表
     * @param currentStoreId 当前门店ID
     * @return 商品列表
     */
    List<GoodsInfoVO> queryGoodsListByIds(String goodsIds, Integer currentStoreId);
}

